package com.warren.context.annotation;

import cn.hutool.core.util.ClassUtil;
import com.warren.beans.factory.config.BeanDefinition;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author warren
 * @create 2021-08-28 22:04
 * @Description 从基本包扫描类路径的组件提供程序。然后将排除和包含过滤器应用于结果类以查找候选者(处理对象扫描装配).
 */
public class ClassPathScanningCandidateComponentProvider {

    /**
     * 扫描到所有 @Component 注解的 Bean 对象
     * @param backPackage 基本路径
     * @return Bean对象的信息
     */
    public Set<BeanDefinition> findCandidateComponents(String backPackage){
        Set<BeanDefinition> candidates = new LinkedHashSet<>();
        //扫描指定包路径下所有包含指定注解的类
        Set<Class<?>> classes = ClassUtil.scanPackageByAnnotation(backPackage, Component.class);
        for (Class<?> clazz : classes){
            candidates.add(new BeanDefinition(clazz));
        }
        return candidates;
    }
}
